package com.yeban.javase.day02.test03;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/10/10
 */

/**
 3.写一个类Person,包含以下属性：
 String  name;
 int  age;
 boolean  gender;  //性别  true男  false女
 Person  partner;  //伴侣
 为Person类写一个marry(Person  p)方法，代表当前对象和p结婚，如若可以结婚，则输出恭贺信息，
 否则输出不能结婚原因。要求在另外一个类中写一个主方法，来测试以上程序。
 （下列情况不能结婚：1，同性；2，未达到结婚年龄，男<24，女<22；3，某一方已婚）
 */
public class Person {
    private String name;
    private int age;
    private boolean gender;  //性别  true男  false女
    private Person partner;  //伴侣

    public Person() {
    }

    public Person(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public void marry(Person p) {
        if(this.gender == p.gender) {
            System.out.println("由于" + this.name + "和" + p.name + "是同性！不能结婚！");
        }
        else if((this.gender == true && this.age < 24) || (this.gender == false &&  this.age < 22)) {   // 当前对象为男且不足24时，为女且不足22时
            System.out.println("由于" + this.name + "年龄不够！不能结婚！");
        }

        else if((p.gender == true && p.age < 24) || (p.gender == false &&  p.age < 22)) {                 // p对象为男且不足24时，为女且不足22时
            System.out.println("由于" + p.name + "年龄不够！不能结婚！");
        }
        else if(this.partner != null){  // 当前对象有伴侣了
            System.out.println("由于" + this.name + "已婚了！不能结婚！");
        }

        else if(p.partner != null) {    // p对象有伴侣了
            System.out.println("由于" + p.name + "已婚了！不能结婚！");
        }

        else {
            this.partner = p;
            p.partner = this;
            System.out.println("恭喜！" + this.name + "可以和" + p.name + "结婚！");
        }

    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return gender
     */
    public boolean isGender() {
        return gender;
    }

    /**
     * 设置
     * @param gender
     */
    public void setGender(boolean gender) {
        this.gender = gender;
    }

    /**
     * 获取
     * @return partner
     */
    public Person getPartner() {
        return partner;
    }

    /**
     * 设置
     * @param partner
     */
    public void setPartner(Person partner) {
        this.partner = partner;
    }

    public String toString() {
        return "Person{name = " + name + ", age = " + age + ", gender = " + gender + ", partner = " + partner + "}";
    }
}

class PersonTest {

    public static void main(String[] args) {

        // 情况1：正常结婚（异性、年龄达标、未婚）
        Person p1 = new Person("张三", 25, true);  // 男，25岁
        Person p2 = new Person("李四", 23, false); // 女，23岁
        p1.marry(p2);

        // 情况2：同性结婚（男+男）
        Person p3 = new Person("王五", 30, true);  // 男，30岁
        p1.marry(p3);

        // 情况3：年龄不达标（女方未满22）
        Person p4 = new Person("赵六", 20, false); // 女，20岁
        Person p5 = new Person("孙七", 26, true);  // 男，26岁
        p5.marry(p4);

        // 情况4：一方已婚（p1已和p2结婚，再和他人结婚）
        Person p6 = new Person("周八", 28, false); // 女，28岁
        p1.marry(p6);

        // 情况5：男方年龄不达标（23岁）
        Person p7 = new Person("吴九", 23, true);  // 男，23岁
        Person p8 = new Person("郑十", 25, false); // 女，25岁
        p7.marry(p8);
    }
}
